package dao;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Iterator;

import javax.persistence.Query;

import model.Produto;

public class ProdutoDAO extends DaoGenerico<Produto> {

	// Consulta 7
	public String maisTempoSemVenda() {
		Query query = entityManager
				.createQuery("select p.proNomeProduto from model.Produto as p where p.proDataUltVenda = (select min(p1.proDataUltVenda) from model.Produto as p1)");
		return (String) query.getResultList().get(0);

	}

	
	
	// Consulta 3
		public String ultimaVenda(String produto) {
			Query query = entityManager
					.createQuery("select min(v.venDataVenda) from Venda v, ItensDeVenda iv, Produto p where p.proNomeProduto = '"+produto+"' AND p.id = iv.produto AND iv.produto = v.id");
			return "Ultima Venda de "+produto+": "+(Timestamp) query.getResultList().get(0);

		}

	
	
	// Consulta 8
	public ArrayList<String> produtosMaisVendidos() {
		Query query = entityManager
				.createQuery("SELECT  p.proNomeProduto as Nome, p.id as ID FROM Produto p, ItensDeVenda iv, Venda v WHERE  v.venDataVenda between '2013-09-01 00:00:00.0' AND '2013-10-30 00:00:00.0' and v.id = iv.venda and	p.id = iv.produto GROUP BY(iv.produto) ORDER BY (iv.itensQuantProduto) DESC");

		@SuppressWarnings("unchecked")
		Iterator<Object[]> iterator = query.getResultList().iterator();
		ArrayList<String> resultados = new ArrayList<String>();

		while (iterator.hasNext() || resultados.size() < 3) {
			Object[] obj = iterator.next();
			String nomeProduto = (String) obj[0];
			Integer idProduto = (Integer) obj[1];

			resultados.add("ID: " + idProduto + "\tProduto: " + nomeProduto);

		}

		return resultados;

	}

	// Consulta 10

	/**
	 * @param dataInicial
	 *            - Formato: AAAA-MM-DD
	 * @param dataFinal
	 *            - Formato: AAAA-MM-DD
	 */

	public ArrayList<String> produtosMaisLucrativosNoMes(String dataInicial,
			String dataFinal) {
		Query query = entityManager
				.createQuery("SELECT DISTINCT p.proNomeProduto as Nome FROM Venda v, ItensDeVenda iv, Produto p "
						+ "WHERE v.venDataVenda between '"
						+ dataInicial
						+ " 00:00:00.0' AND '"
						+ dataFinal
						+ " 00:00:00.0' "
						+ "AND v.id = iv.id AND iv.produto = p.id GROUP BY(p.proNomeProduto)");

		ArrayList<String> resultados = new ArrayList<String>();

		for (int i = 0; i < query.getResultList().size(); i++) {

			String nomeProduto = (String) query.getResultList().get(i);

			resultados.add("Nome do Produto: " + nomeProduto);

		}

		return resultados;

	}

	// Consulta 2
	public ArrayList<String> produtosComMenorCusto(String produto1,
			String produto2, String produto3) {
		Query query = entityManager
				.createQuery("SELECT DISTINCT fr.fornecedorNomeEmpresa AS empresa, fr.fornecedorNomeVendedor AS vendedor, p.proNomeProduto AS produto FROM Fornecedor fr, Fornecimento ft, Produto p inner join p.fornecimentos fn WHERE fr.id = ft.fornIdFornecedor AND ft.id = fn.id AND p.proQuatidade > 5 AND p.proNomeProduto IN ('"
						+ produto1
						+ "', '"
						+ produto2
						+ "', '"
						+ produto3
						+ "') ORDER BY(p.proNomeProduto)");

		@SuppressWarnings("unchecked")
		Iterator<Object[]> iterator = query.getResultList().iterator();
		ArrayList<String> resultados = new ArrayList<String>();

		while (iterator.hasNext() || resultados.size() < 3) {
			Object[] obj = iterator.next();
			String nomeFornecedor = (String) obj[0];
			String nomeVendedor = (String) obj[1];
			String nomeProduto = (String) obj[2];

			resultados.add("Fornecedor: " + nomeFornecedor + "\tVendedor: "
					+ nomeVendedor + "\tProduto: " + nomeProduto);

		}

		return resultados;

	}

}
